package com.wjw.rabbitmq.springbootorderrabbitmqconsumer.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * TTL队列过期时间设置：
 * Direct模式：路由Key模式
 * RabbitMQ配置文件类,创建交换机、创建队列、绑定交换机和队列的关系。
 * 可以在生产者和消费者两边同时配置。
 */
@Configuration
public class TTLRabbitMQConfiguration {

    //1.声明fanout模式的交换机
    @Bean
    public DirectExchange ttlDirectExchange(){
        /**
         * 参数1：交换机名称：来源于OrderService中的名称,要保持一致
         * 参数2：是否持久化
         * 参数3：是否自动删除
         */
        return new DirectExchange("ttl_direct_xchange",true,false);
    }

    @Bean
    public Queue ttlQueueDirect(){
        //设置队列过期时间
        Map<String,Object> args = new HashMap<>();
        args.put("x-message-ttl",5000);//这里一定是int类型,单位是毫秒
        /**
         * 参数1：队列名称
         * 参数2：是否持久化
         */
        return new Queue("ttl.direct.queue",true);
    }

    //3.完成队列和交换机之间的绑定关系,有路由key
    @Bean
    public Binding ttlBindingDirect(){
        return BindingBuilder.bind(ttlQueueDirect()).to(ttlDirectExchange()).with("ttl");
    }
}

